// =========================
// app.ts - 应用常量与映射表
// =========================

/**
 * 全局头部菜单挂载点 DOM ID
 * 用于主布局中菜单渲染定位
 */
export const GLOBAL_HEADER_MENU_ID: string = '__GLOBAL_HEADER_MENU__';

/**
 * 全局侧边栏菜单挂载点 DOM ID
 * 用于主布局中侧边栏菜单渲染定位
 */
export const GLOBAL_SIDER_MENU_ID: string = '__GLOBAL_SIDER_MENU__';

/**
 * 布局模式类型定义
 * 对应 src/types/app.d.ts 中 UnionKey.ThemeLayoutMode
 */
export type ThemeLayoutMode = 'horizontal' | 'horizontal-mix' | 'vertical' | 'vertical-mix';

/**
 * 布局模式映射表
 * key 为布局模式，value 为中文描述
 */
export const themeLayoutModeRecord: Record<ThemeLayoutMode, string> = {
	horizontal: '顶部菜单模式',
	'horizontal-mix': '顶部菜单混合模式',
	vertical: '左侧菜单模式',
	'vertical-mix': '左侧菜单混合模式'
};

/**
 * 滚动模式类型定义
 * 对应 src/types/app.d.ts 中 UnionKey.ThemeScrollMode
 */
export type ThemeScrollMode = 'content' | 'wrapper';

/**
 * 滚动模式映射表
 * key 为滚动模式，value 为中文描述
 */
export const themeScrollModeOptions: Record<ThemeScrollMode, string> = {
	content: '主体滚动',
	wrapper: '外层滚动'
};

/**
 * 标签栏风格类型定义
 * 对应 src/types/app.d.ts 中 UnionKey.ThemeTabMode
 */
export type ThemeTabMode = 'button' | 'chrome';

/**
 * 标签栏风格映射表
 * key 为标签栏风格，value 为中文描述
 */
export const themeTabModeOptions: Record<ThemeTabMode, string> = {
	button: '按钮风格',
	chrome: '谷歌风格'
};

/**
 * 页面切换动画类型定义
 * 对应 src/types/app.d.ts 中 UnionKey.ThemePageAnimateMode
 */
export type ThemePageAnimateMode =
	| 'fade'
	| 'fade-bottom'
	| 'fade-scale'
	| 'fade-slide'
	| 'none'
	| 'zoom-fade'
	| 'zoom-out';

/**
 * 页面切换动画类型映射表
 * key 为动画类型，value 为中文描述
 */
export const themePageAnimationModeOptions: Record<ThemePageAnimateMode, string> = {
	fade: '弹动',
	'fade-bottom': '底部消退',
	'fade-scale': '缩放消退',
	'fade-slide': '滑动',
	none: '无',
	'zoom-fade': '渐变',
	'zoom-out': '闪现'
};

/**
 * 将枚举对象转换为键值对数组
 * 此函数的目的是便于将枚举类型的数据转换为易于前端展示的数组格式
 *
 * @param enumObj 一个枚举对象，其属性将被转换为数组中的元素
 * @returns 返回一个对象数组，每个对象包含 'label' 和 'value' 属性，分别对应枚举的值和键
 */
export const objToArray = (enumObj: Record<string, string>) => {
	// 初始化一个空数组，用于存储转换后的键值对对象
	const arr: { label: string; value: string }[] = [];

	// 遍历枚举对象的每个属性
	for (const key in enumObj) {
		if (Object.hasOwn(enumObj, key)) {
			arr.push({
				label: enumObj[key],
				value: key
			});
		}
	}

	// 返回转换后的键值对数组
	return arr;
};

/**
 * 系统信息描述
 * 可用于开发中页面的占位提示
 */
export const info: string = `开发当中...`;

/**
 * 暗黑模式 CSS 类名
 * 用于全局切换暗黑主题
 */
export const DARK_CLASS: string = 'dark';
